/*
 * Archivo.h
 *
 *  Created on: Sep 11, 2012
 *      Author: romina
 */

#ifndef ARCHIVOSMANAGER_H_
#define ARCHIVOSMANAGER_H_

#include <fstream>
#include <iostream>
#include <sys/stat.h>
#include <string.h>
#include <exception>

using namespace std;

namespace archivos {

enum MODOAPERTURA {R, W, RW};


class FaltaElModoDeAperturaException: public exception
{
  virtual const char* what() const throw()
  {
    return "No se pudo abrir el archivo porque no se establecio el modo.";
  }
};


class ArchivoBase{
protected:
	std::fstream archivo;
	string path;
	string filename;
public:
	ArchivoBase();
	ArchivoBase(string path);
	string getPath();
	string getName();
	string obtenerLinea();
	string obtenerPalabra();
	void escribirPalabra(string palabra);
	void escribirLinea(string linea);
	void ir_al_principio();
	bool is_EOF();
	int getchar();
	static bool existe(string path);
	//cierra el archivo
	virtual ~ArchivoBase();
};

class ArchivoDeTexto : public ArchivoBase{
public:
	ArchivoDeTexto();
	ArchivoDeTexto(string path, MODOAPERTURA  modo);
	static void crear(string filename);
	virtual ~ArchivoDeTexto();
};

class ArchivoBinario : public ArchivoBase{
public:
	ArchivoBinario();
	ArchivoBinario(string path, MODOAPERTURA  modo);
	static void crear(string filename);
	void write(char * buffer, int long_buffer);
	void read(char * buffer, int long_buffer);
	virtual ~ArchivoBinario();
};

} /* namespace archivosmanager */
#endif /* ARCHIVOSMANAGER_H_ */
